<?php
/**
 * Application model for Cake.
 *
 * This file is application-wide model file. You can put all
 * application-wide model-related methods here.
 *
 * PHP 5
 *
 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
 * Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
 *
 * Licensed under The MIT License
 * Redistributions of files must retain the above copyright notice.
 *
 * @copyright     Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
 * @link          http://cakephp.org CakePHP(tm) Project
 * @package       app.Model
 * @since         CakePHP(tm) v 0.2.9
 * @license       MIT License (http://www.opensource.org/licenses/mit-license.php)
 */

App::uses('Model', 'Model');

/**
 * Application model for Cake.
 *
 * Add your application-wide methods in the class below, your models
 * will inherit them.
 *
 * @package       app.Model
 */
class AppModel extends Model {
	
	var $recursive = -1;
	
	public function carregar_semana() {

		return array(
			0 => 'Domingo',
			1 => 'Segunda-feira',
			2 => 'Terça-feira',
			3 => 'Quarta-feira',
			4 => 'Quinta-feira',
			5 => 'Sexta-feira',
			6 => 'Sábado'
		);
		
	}
	
	public function carregar_mes() {
		return array(
		
			'1'  => 'Janeiro', 
			'2'  => 'Fevereiro',
			'3'  => 'Março',
			'4'  => 'Abril',
			'5'  => 'Maio',
			'6'  => 'Junho',
			'7'  => 'Julho',
			'8'  => 'Agosto',
			'9'  => 'Setembro',
			'10' => 'Outubro',
			'11' => 'Novembro',
			'12' => 'Dezembro',		
		);
	}
		
	public function date_add_days($data, $numero_dias) {

		date_default_timezone_set('America/Sao_Paulo');
		
		$padrao_banco = true;

		if (substr($data,2,1) == '/') { // 01/02/2010
			$data = substr($data,6,4) . '-' . substr($data,3,2) . '-' . substr($data,0,2);
			$padrao_banco = false;
		}

		$data = strtotime("+$numero_dias day", strtotime($data));
		if ($padrao_banco) {
			$retorno = date("Y-m-d", $data);
		} else {
			$retorno = date("d/m/Y", $data);
		}

		return $retorno;
	}
		
	/**
	 * 
	 * Retorna a diferença em dias entre duas datas
	 * @param date $data_inicial = Data inicial
	 * @param date $data_final = Data de referência; Se não informada, data atual será considerada
	 */
	public function date_difference($data_inicial, $data_final = null) {
		
		date_default_timezone_set('America/Sao_Paulo');
		
		if (!$data_final) {
			$data_final = date('Y-m-d');
		}
		
		$data_inicial = $this->date_to_us($data_inicial);
		$data_final = $this->date_to_us($data_final);
		
		$time_inicial = strtotime($data_inicial);
		$time_final = strtotime($data_final);

		$diferenca = $time_final - $time_inicial;

		$dias = (int)floor( $diferenca / (60 * 60 * 24));

		return ($dias > 0) ? $dias : 0;
	}
	
	public function date_remove_days($data, $numero_dias) {

		date_default_timezone_set('America/Sao_Paulo');
		
		$padrao_banco = true;

		if (substr($data,2,1) == '/') { // 01/02/2010
			$data = substr($data,6,4) . '-' . substr($data,3,2) . '-' . substr($data,0,2);
			$padrao_banco = false;
		}

		$data = strtotime("-$numero_dias day", strtotime($data));
		if ($padrao_banco) {
			$retorno = date("Y-m-d", $data);
		} else {
			$retorno = date("d/m/Y", $data);
		}

		return $retorno;
	}	
		
	public function date_to_us($data) {
		
		if (!$data) {
			return null;
		}
		
		if (substr($data,2,1) != '/') {
			return ($data);
		}
		
		return ($data) ? substr($data,6,4) . '-' . substr($data,3,2) . '-' .  substr($data,0,2) : null;
	}

	public function date_to_br($data) {
		
		if (!$data) {
			return null;
		}
				
		if (substr($data,4,1) != '-') {
			return ($data);
		}
		
		return ($data) ? substr($data,8,2) . '/' . substr($data,5,2) . '/' .  substr($data,0,4) . ' ' . substr($data,11,8) : null;
	}

	public function date_week($data) {
		
		date_default_timezone_set('America/Sao_Paulo');
		
		if (substr($data,2,1) == '/') { // 01/02/2010
			$data = substr($data,6,4) . '-' . substr($data,3,2) . '-' . substr($data,0,2);
		}		

		$dia_semana = date("w", strtotime($data));

		return $dia_semana;

	}
	
	public function date_year() {

		date_default_timezone_set('America/Sao_Paulo');
		
		return date('Y');

	}
	
	public function dia_semana($data) {
		$dias = $this->carregar_semana(); 
		$dia = $this->date_week($data);
		return $dias[$dia];
	}
	
	public function hour_add_minutes($hora, $minutos_a_incrementar) {
		
		date_default_timezone_set('America/Sao_Paulo');
		
		if (strlen($hora) == 5)
			$hora = $hora . ':00';
			
		$hr = explode(":", $hora);
		
		//return strftime("%H:%M:%S", mktime($hr[0], $hr[1]+$minutos_a_incrementar, $hr[2], 0, 0, 0));
		return strftime("%H:%M", mktime($hr[0], $hr[1]+$minutos_a_incrementar, $hr[2], 0, 0, 0)) . ':00';
	}
	
	public function money_to_view($valor) {
				
		$pos = strpos($valor, ',');
		if ($pos > 0) {
			return $valor;
		}
				
		return number_format($valor, 2, ',', '.');
	}

	public function money_to_store($valor) {
		
		$valor = $this->money_to_view($valor);  
		// garantir que um valor, por ex, 30, seja 30,00. 
		// O retorno precisa ser 30.00; caso retorno apenas 30, gera erros nas comparacoes

		$pos = strpos($valor, ',');
		if ($pos == 0 || $pos === false) {
			return $valor;
		} 
		
		$valor = str_replace(".", "", $valor); 
		$valor = str_replace(",", ".", $valor);

		return $valor;
	}	
	
	public function today($formato = 'us') {

		date_default_timezone_set('America/Sao_Paulo');

		return ($formato == 'us') ? date('Y-m-d') : date('d/m/Y');
	}	
		
}